package sad.dao;

import sad.modelo.Disciplina;
import sad.modelo.Professor;
import sad.util.DAOEvent;

public class AvaliacaoDAO extends AbstractDAO{
    
    private static AvaliacaoDAO INSTANCE = null;
 
    public static AvaliacaoDAO getInstance(){
        if (AvaliacaoDAO.INSTANCE ==null){
            AvaliacaoDAO.INSTANCE = new AvaliacaoDAO();
        }
        return AvaliacaoDAO.INSTANCE;
    }
  //C(reate)R(etrieve)U(pdate)D(elete)

  public Disciplina create(String nome, String ab,
                            Professor prof){

        Disciplina d = new Disciplina();
        d.setNome(nome);
        d.setAbrev(ab);
        d.setProf(prof);
        if(DAO.create(d)){
            AvaliacaoDAO.getInstance().getSuporteEventos().disparaDAOEvento(
                    new DAOEvent(d.getNome(), DAOEvent.DAO_CREATE)); 
            return d;
        }else{
            AvaliacaoDAO.getInstance().getSuporteEventos().disparaDAOEvento(
                    new DAOEvent(d.getNome(), DAOEvent.DAO_NOCREATE));
            return null;
        }
  }

public boolean isExist(String nome, String abrev, Professor p) {
    boolean existe = false;
    Disciplina proto = new Disciplina();
    proto.setAbrev(abrev);
    Disciplina d = (Disciplina)DAO.retrieve(proto);
    if(d != null){
         existe =true;
         AvaliacaoDAO.getInstance().getSuporteEventos().disparaDAOEvento(
                new DAOEvent(abrev, DAOEvent.DAO_EXISTE));
    }else{
        proto = new Disciplina();
        proto.setNome(nome);
        Disciplina dset = (Disciplina)DAO.retrieve(proto);
        if(dset==null){
            existe = false;
        }else {
            if (dset.getProf().getNome().equals(p.getNome())){
                existe =true;
                AvaliacaoDAO.getInstance().getSuporteEventos().disparaDAOEvento(
                    new DAOEvent(nome, DAOEvent.DAO_EXISTE));
            }else {
                existe =false;
            }
        }
    }
    return existe;
 }

  public static Disciplina getDisciplinaSaved(String nome) {
    Disciplina proto = new Disciplina();
    proto.setNome(nome);
    return (Disciplina) DAO.retrieve(proto);
  }
  
  public Disciplina update(Disciplina d) {
        
        if(DAO.create(d)){
            AvaliacaoDAO.getInstance().getSuporteEventos().disparaDAOEvento(
                    new DAOEvent(d.getNome(), DAOEvent.DAO_UPDATE)); 
            return d;
        }else{
            AvaliacaoDAO.getInstance().getSuporteEventos().disparaDAOEvento(
                    new DAOEvent(d.getNome(), DAOEvent.DAO_NOCREATE));
            return null;
        }
    } 
}